home *** CD-ROM | disk | FTP | other *** search
/ PD Collection CD 1 / PD Collection CD 1.iso / programer2 / pari2 / pari / other / sparc_s < prev    next >
Text File  |  1991-11-28  |  10KB  |  485 lines

  1.         .seg "text"
  2.         .global _addll,_subll,_addllx,_subllx,_shiftl,_shiftlr,_bfffo
  3.         .global _mulll,_overflow,_hiremainder,_addmul,_divll
  4.  
  5. _addll: sethi   %hi(_overflow),%o3
  6.         addcc   %o0,%o1,%o0
  7.         addx    %g0,%g0,%o2
  8.         retl
  9.         st      %o2,[%o3+%lo(_overflow)]
  10. _subll: sethi   %hi(_overflow),%o3
  11.         subcc   %o0,%o1,%o0
  12.         addx    %g0,%g0,%o2
  13.         retl
  14.         st      %o2,[%o3+%lo(_overflow)]
  15. _addllx: sethi  %hi(_overflow),%o3
  16.         ld      [%o3+%lo(_overflow)],%o2
  17.         subcc   %g0,%o2,%g0
  18.         addxcc  %o0,%o1,%o0
  19.         addx    %g0,%g0,%o2
  20.         retl
  21.         st      %o2,[%o3+%lo(_overflow)]
  22. _subllx: sethi  %hi(_overflow),%o3
  23.         ld      [%o3+%lo(_overflow)],%o2
  24.         subcc   %g0,%o2,%g0
  25.         subxcc  %o0,%o1,%o0
  26.         addx    %g0,%g0,%o2
  27.         retl
  28.         st      %o2,[%o3+%lo(_overflow)]
  29. _shiftl: sethi  %hi(_hiremainder),%o3
  30.         neg     %o1,%o4
  31.         srl     %o0,%o4,%o2
  32.         st      %o2,[%o3+%lo(_hiremainder)]
  33.         retl
  34.         sll     %o0,%o1,%o0
  35. _shiftlr: sethi %hi(_hiremainder),%o3
  36.         neg     %o1,%o4
  37.         sll     %o0,%o4,%o2
  38.         st      %o2,[%o3+%lo(_hiremainder)]
  39.         retl
  40.         srl     %o0,%o1,%o0
  41. _bfffo: sethi   %hi(0xffff0000),%o1
  42.         andcc   %o1,%o0,%g0
  43.         bnz,a   1f
  44.         clr     %o2
  45.         sll     %o0,16,%o0
  46.         mov     16,%o2
  47. 1:      sethi   %hi(0xff000000),%o1
  48.         andcc   %o1,%o0,%g0
  49.         bnz     2f
  50.         sethi   %hi(0xf0000000),%o1
  51.         sll     %o0,8,%o0
  52.         add     %o2,8,%o2
  53. 2:      andcc   %o1,%o0,%g0
  54.         bnz,a   3f
  55.         srl     %o0,28,%o0
  56.         add     %o2,4,%o2
  57.         srl     %o0,24,%o0
  58. 3:      set     _tabshi,%o3
  59.     sll    %o0,2,%o0
  60.         ld      [%o3+%o0],%o1
  61.         retl
  62.         add     %o2,%o1,%o0
  63. _mulll: sethi   %hi(_hiremainder),%o3
  64.         or      %o0,%o1,%o4
  65.         mov     %o0,%y
  66.         andncc  %o4,0xfff,%g0
  67.         be      2f
  68.         andcc   %g0,%g0,%o4
  69.         mulscc  %o4,%o1,%o4
  70.         mulscc  %o4,%o1,%o4
  71.         mulscc  %o4,%o1,%o4
  72.         mulscc  %o4,%o1,%o4
  73.         mulscc  %o4,%o1,%o4
  74.         mulscc  %o4,%o1,%o4
  75.         mulscc  %o4,%o1,%o4
  76.         mulscc  %o4,%o1,%o4
  77.         mulscc  %o4,%o1,%o4
  78.         mulscc  %o4,%o1,%o4
  79.         mulscc  %o4,%o1,%o4
  80.         mulscc  %o4,%o1,%o4
  81.         mulscc  %o4,%o1,%o4
  82.         mulscc  %o4,%o1,%o4
  83.         mulscc  %o4,%o1,%o4
  84.         mulscc  %o4,%o1,%o4
  85.         mulscc  %o4,%o1,%o4
  86.         mulscc  %o4,%o1,%o4
  87.         mulscc  %o4,%o1,%o4
  88.         mulscc  %o4,%o1,%o4
  89.         mulscc  %o4,%o1,%o4
  90.         mulscc  %o4,%o1,%o4
  91.         mulscc  %o4,%o1,%o4
  92.         mulscc  %o4,%o1,%o4
  93.         mulscc  %o4,%o1,%o4
  94.         mulscc  %o4,%o1,%o4
  95.         mulscc  %o4,%o1,%o4
  96.         mulscc  %o4,%o1,%o4
  97.         mulscc  %o4,%o1,%o4
  98.         mulscc  %o4,%o1,%o4
  99.         mulscc  %o4,%o1,%o4
  100.         mulscc  %o4,%o1,%o4
  101.         mulscc  %o4,%g0,%o4
  102.         tst     %o1
  103.         bl,a    1f
  104.         add     %o4,%o0,%o4
  105. 1:      st      %o4,[%o3+%lo(_hiremainder)]
  106.         retl
  107.         rd      %y,%o0
  108. 2:      clr     [%o3+%lo(_hiremainder)]
  109.         mulscc  %o4,%o1,%o4
  110.         mulscc  %o4,%o1,%o4
  111.         mulscc  %o4,%o1,%o4
  112.         mulscc  %o4,%o1,%o4
  113.         mulscc  %o4,%o1,%o4
  114.         mulscc  %o4,%o1,%o4
  115.         mulscc  %o4,%o1,%o4
  116.         mulscc  %o4,%o1,%o4
  117.         mulscc  %o4,%o1,%o4
  118.         mulscc  %o4,%o1,%o4
  119.         mulscc  %o4,%o1,%o4
  120.         mulscc  %o4,%o1,%o4
  121.         mulscc  %o4,%g0,%o4
  122.         rd      %y,%o5
  123.         sll     %o4,12,%o4
  124.         srl     %o5,20,%o5
  125.         retl
  126.         or      %o5,%o4,%o0
  127.  
  128. _addmul: sethi  %hi(_hiremainder),%o3
  129.     ld    [%o3+%lo(_hiremainder)],%o2
  130.         or      %o0,%o1,%o4
  131.         mov     %o0,%y
  132.         andncc  %o4,0xfff,%g0
  133.         be      2f
  134.         andcc   %g0,%g0,%o4
  135.         mulscc  %o4,%o1,%o4
  136.         mulscc  %o4,%o1,%o4
  137.         mulscc  %o4,%o1,%o4
  138.         mulscc  %o4,%o1,%o4
  139.         mulscc  %o4,%o1,%o4
  140.         mulscc  %o4,%o1,%o4
  141.         mulscc  %o4,%o1,%o4
  142.         mulscc  %o4,%o1,%o4
  143.         mulscc  %o4,%o1,%o4
  144.         mulscc  %o4,%o1,%o4
  145.         mulscc  %o4,%o1,%o4
  146.         mulscc  %o4,%o1,%o4
  147.         mulscc  %o4,%o1,%o4
  148.         mulscc  %o4,%o1,%o4
  149.         mulscc  %o4,%o1,%o4
  150.         mulscc  %o4,%o1,%o4
  151.         mulscc  %o4,%o1,%o4
  152.         mulscc  %o4,%o1,%o4
  153.         mulscc  %o4,%o1,%o4
  154.         mulscc  %o4,%o1,%o4
  155.         mulscc  %o4,%o1,%o4
  156.         mulscc  %o4,%o1,%o4
  157.         mulscc  %o4,%o1,%o4
  158.         mulscc  %o4,%o1,%o4
  159.         mulscc  %o4,%o1,%o4
  160.         mulscc  %o4,%o1,%o4
  161.         mulscc  %o4,%o1,%o4
  162.         mulscc  %o4,%o1,%o4
  163.         mulscc  %o4,%o1,%o4
  164.         mulscc  %o4,%o1,%o4
  165.         mulscc  %o4,%o1,%o4
  166.         mulscc  %o4,%o1,%o4
  167.         mulscc  %o4,%g0,%o4
  168.         tst     %o1
  169.         bl,a    1f
  170.         add     %o4,%o0,%o4
  171. 1:    rd    %y,%o0
  172.         addcc   %o0,%o2,%o0
  173.         addx    %g0,%o4,%o4
  174.         retl
  175.     st      %o4,[%o3+%lo(_hiremainder)]
  176. 2:      mulscc  %o4,%o1,%o4
  177.         mulscc  %o4,%o1,%o4
  178.         mulscc  %o4,%o1,%o4
  179.         mulscc  %o4,%o1,%o4
  180.         mulscc  %o4,%o1,%o4
  181.         mulscc  %o4,%o1,%o4
  182.         mulscc  %o4,%o1,%o4
  183.         mulscc  %o4,%o1,%o4
  184.         mulscc  %o4,%o1,%o4
  185.         mulscc  %o4,%o1,%o4
  186.         mulscc  %o4,%o1,%o4
  187.         mulscc  %o4,%o1,%o4
  188.         mulscc  %o4,%g0,%o4
  189.         rd      %y,%o5
  190.         sll     %o4,12,%o4
  191.         srl     %o5,20,%o5
  192.         or      %o5,%o4,%o0
  193.         addcc   %o0,%o2,%o0
  194.         addx    %g0,%g0,%o4
  195.     retl
  196.     st      %o4,[%o3+%lo(_hiremainder)]
  197.  
  198. #define    SS0(label) \
  199.     addx    %o2,%o2,%o2;\
  200.     subcc    %o2,%o1,%o3;\
  201.     bcc    label;\
  202.     addxcc    %o0,%o0,%o0
  203.  
  204. #define    SS1(label) \
  205.     addx    %o3,%o3,%o3;\
  206.     subcc    %o3,%o1,%o2;\
  207.     bcc    label;\
  208.     addxcc    %o0,%o0,%o0
  209.  
  210. _divll: sethi  %hi(_hiremainder),%o4
  211.     ld    [%o4+%lo(_hiremainder)],%o2
  212.     subcc    %o2,%o1,%g0
  213.     blu    1f
  214.     addcc    %o1,%o1,%g0
  215.     mov    0x2f,%o0
  216.     call    _err,1
  217.     nop
  218. 1:    bcc    Lsmalldiv
  219.     andcc    %o1,1,%g0
  220.     be    Levendiv
  221.     srl    %o1,1,%o1
  222.     add    %o1,1,%o1
  223.     subcc    %o2,%o1,%o3
  224.     bcc    Lb01
  225.     addxcc    %o0,%o0,%o0
  226. La01:    SS0(Lb02)
  227. La02:    SS0(Lb03)
  228. La03:    SS0(Lb04)
  229. La04:    SS0(Lb05)
  230. La05:    SS0(Lb06)
  231. La06:    SS0(Lb07)
  232. La07:    SS0(Lb08)
  233. La08:    SS0(Lb09)
  234. La09:    SS0(Lb10)
  235. La10:    SS0(Lb11)
  236. La11:    SS0(Lb12)
  237. La12:    SS0(Lb13)
  238. La13:    SS0(Lb14)
  239. La14:    SS0(Lb15)
  240. La15:    SS0(Lb16)
  241. La16:    SS0(Lb17)
  242. La17:    SS0(Lb18)
  243. La18:    SS0(Lb19)
  244. La19:    SS0(Lb20)
  245. La20:    SS0(Lb21)
  246. La21:    SS0(Lb22)
  247. La22:    SS0(Lb23)
  248. La23:    SS0(Lb24)
  249. La24:    SS0(Lb25)
  250. La25:    SS0(Lb26)
  251. La26:    SS0(Lb27)
  252. La27:    SS0(Lb28)
  253. La28:    SS0(Lb29)
  254. La29:    SS0(Lb30)
  255. La30:    SS0(Lb31)
  256. La31:    SS0(Lb32)
  257. La32:    addx    %o2,%o2,%o2
  258.     xor    %o0,-1,%o0
  259.     add    %o1,%o1,%o1
  260.     sub    %o1,1,%o1
  261.     addcc    %o0,%o2,%o2
  262.     bcc    1f
  263.     subcc    %o2,%o1,%o3
  264.     subcc    %o3,%o1,%o2
  265.     bcs    2f
  266.     add    %o0,1,%o0
  267.     add    %o0,1,%o0
  268. 3:    retl
  269.     st    %o2,[%o4+%lo(_hiremainder)]
  270. 1:    bcs    3b
  271.     nop
  272.     add    %o0,1,%o0
  273. 2:    retl
  274.     st    %o3,[%o4+%lo(_hiremainder)]
  275.  
  276. Lb01:    SS1(La02)
  277. Lb02:    SS1(La03)
  278. Lb03:    SS1(La04)
  279. Lb04:    SS1(La05)
  280. Lb05:    SS1(La06)
  281. Lb06:    SS1(La07)
  282. Lb07:    SS1(La08)
  283. Lb08:    SS1(La09)
  284. Lb09:    SS1(La10)
  285. Lb10:    SS1(La11)
  286. Lb11:    SS1(La12)
  287. Lb12:    SS1(La13)
  288. Lb13:    SS1(La14)
  289. Lb14:    SS1(La15)
  290. Lb15:    SS1(La16)
  291. Lb16:    SS1(La17)
  292. Lb17:    SS1(La18)
  293. Lb18:    SS1(La19)
  294. Lb19:    SS1(La20)
  295. Lb20:    SS1(La21)
  296. Lb21:    SS1(La22)
  297. Lb22:    SS1(La23)
  298. Lb23:    SS1(La24)
  299. Lb24:    SS1(La25)
  300. Lb25:    SS1(La26)
  301. Lb26:    SS1(La27)
  302. Lb27:    SS1(La28)
  303. Lb28:    SS1(La29)
  304. Lb29:    SS1(La30)
  305. Lb30:    SS1(La31)
  306. Lb31:    SS1(La32)
  307. Lb32:    addx    %o3,%o3,%o2
  308.     xor    %o0,-1,%o0
  309.     add    %o1,%o1,%o1
  310.     sub    %o1,1,%o1
  311.     addcc    %o0,%o2,%o2
  312.     bcc    1f
  313.     subcc    %o2,%o1,%o3
  314.     subcc    %o3,%o1,%o2
  315.     bcs    2f
  316.     add    %o0,1,%o0
  317.     add    %o0,1,%o0
  318. 3:    retl
  319.     st    %o2,[%o4+%lo(_hiremainder)]
  320. 1:    bcs    3b
  321.     nop
  322.     add    %o0,1,%o0
  323. 2:    retl
  324.     st    %o3,[%o4+%lo(_hiremainder)]
  325.  
  326. Lsmalldiv:
  327.     addcc    %o0,%o0,%o0
  328. Lc00:    SS0(Ld01)
  329. Lc01:    SS0(Ld02)
  330. Lc02:    SS0(Ld03)
  331. Lc03:    SS0(Ld04)
  332. Lc04:    SS0(Ld05)
  333. Lc05:    SS0(Ld06)
  334. Lc06:    SS0(Ld07)
  335. Lc07:    SS0(Ld08)
  336. Lc08:    SS0(Ld09)
  337. Lc09:    SS0(Ld10)
  338. Lc10:    SS0(Ld11)
  339. Lc11:    SS0(Ld12)
  340. Lc12:    SS0(Ld13)
  341. Lc13:    SS0(Ld14)
  342. Lc14:    SS0(Ld15)
  343. Lc15:    SS0(Ld16)
  344. Lc16:    SS0(Ld17)
  345. Lc17:    SS0(Ld18)
  346. Lc18:    SS0(Ld19)
  347. Lc19:    SS0(Ld20)
  348. Lc20:    SS0(Ld21)
  349. Lc21:    SS0(Ld22)
  350. Lc22:    SS0(Ld23)
  351. Lc23:    SS0(Ld24)
  352. Lc24:    SS0(Ld25)
  353. Lc25:    SS0(Ld26)
  354. Lc26:    SS0(Ld27)
  355. Lc27:    SS0(Ld28)
  356. Lc28:    SS0(Ld29)
  357. Lc29:    SS0(Ld30)
  358. Lc30:    SS0(Ld31)
  359. Lc31:    SS0(Ld32)
  360. Lc32:    xor    %o0,-1,%o0
  361.     retl
  362.     st    %o2,[%o4+%lo(_hiremainder)]
  363.  
  364. Ld01:    SS1(Lc02)
  365. Ld02:    SS1(Lc03)
  366. Ld03:    SS1(Lc04)
  367. Ld04:    SS1(Lc05)
  368. Ld05:    SS1(Lc06)
  369. Ld06:    SS1(Lc07)
  370. Ld07:    SS1(Lc08)
  371. Ld08:    SS1(Lc09)
  372. Ld09:    SS1(Lc10)
  373. Ld10:    SS1(Lc11)
  374. Ld11:    SS1(Lc12)
  375. Ld12:    SS1(Lc13)
  376. Ld13:    SS1(Lc14)
  377. Ld14:    SS1(Lc15)
  378. Ld15:    SS1(Lc16)
  379. Ld16:    SS1(Lc17)
  380. Ld17:    SS1(Lc18)
  381. Ld18:    SS1(Lc19)
  382. Ld19:    SS1(Lc20)
  383. Ld20:    SS1(Lc21)
  384. Ld21:    SS1(Lc22)
  385. Ld22:    SS1(Lc23)
  386. Ld23:    SS1(Lc24)
  387. Ld24:    SS1(Lc25)
  388. Ld25:    SS1(Lc26)
  389. Ld26:    SS1(Lc27)
  390. Ld27:    SS1(Lc28)
  391. Ld28:    SS1(Lc29)
  392. Ld29:    SS1(Lc30)
  393. Ld30:    SS1(Lc31)
  394. Ld31:    SS1(Lc32)
  395. Ld32:    xor    %o0,-1,%o0
  396.     retl
  397.     st    %o3,[%o4+%lo(_hiremainder)]
  398.  
  399.  
  400. Levendiv:
  401.     subcc    %o2,%o1,%o3
  402.     bcc    Lf01
  403.     addxcc    %o0,%o0,%o0
  404. Le01:    SS0(Lf02)
  405. Le02:    SS0(Lf03)
  406. Le03:    SS0(Lf04)
  407. Le04:    SS0(Lf05)
  408. Le05:    SS0(Lf06)
  409. Le06:    SS0(Lf07)
  410. Le07:    SS0(Lf08)
  411. Le08:    SS0(Lf09)
  412. Le09:    SS0(Lf10)
  413. Le10:    SS0(Lf11)
  414. Le11:    SS0(Lf12)
  415. Le12:    SS0(Lf13)
  416. Le13:    SS0(Lf14)
  417. Le14:    SS0(Lf15)
  418. Le15:    SS0(Lf16)
  419. Le16:    SS0(Lf17)
  420. Le17:    SS0(Lf18)
  421. Le18:    SS0(Lf19)
  422. Le19:    SS0(Lf20)
  423. Le20:    SS0(Lf21)
  424. Le21:    SS0(Lf22)
  425. Le22:    SS0(Lf23)
  426. Le23:    SS0(Lf24)
  427. Le24:    SS0(Lf25)
  428. Le25:    SS0(Lf26)
  429. Le26:    SS0(Lf27)
  430. Le27:    SS0(Lf28)
  431. Le28:    SS0(Lf29)
  432. Le29:    SS0(Lf30)
  433. Le30:    SS0(Lf31)
  434. Le31:    SS0(Lf32)
  435. Le32:    addx    %o2,%o2,%o2
  436.     xor    %o0,-1,%o0
  437.     retl
  438.     st    %o2,[%o4+%lo(_hiremainder)]
  439.  
  440. Lf01:    SS1(Le02)
  441. Lf02:    SS1(Le03)
  442. Lf03:    SS1(Le04)
  443. Lf04:    SS1(Le05)
  444. Lf05:    SS1(Le06)
  445. Lf06:    SS1(Le07)
  446. Lf07:    SS1(Le08)
  447. Lf08:    SS1(Le09)
  448. Lf09:    SS1(Le10)
  449. Lf10:    SS1(Le11)
  450. Lf11:    SS1(Le12)
  451. Lf12:    SS1(Le13)
  452. Lf13:    SS1(Le14)
  453. Lf14:    SS1(Le15)
  454. Lf15:    SS1(Le16)
  455. Lf16:    SS1(Le17)
  456. Lf17:    SS1(Le18)
  457. Lf18:    SS1(Le19)
  458. Lf19:    SS1(Le20)
  459. Lf20:    SS1(Le21)
  460. Lf21:    SS1(Le22)
  461. Lf22:    SS1(Le23)
  462. Lf23:    SS1(Le24)
  463. Lf24:    SS1(Le25)
  464. Lf25:    SS1(Le26)
  465. Lf26:    SS1(Le27)
  466. Lf27:    SS1(Le28)
  467. Lf28:    SS1(Le29)
  468. Lf29:    SS1(Le30)
  469. Lf30:    SS1(Le31)
  470. Lf31:    SS1(Le32)
  471. Lf32:    addx    %o3,%o3,%o3
  472.     xor    %o0,-1,%o0
  473.     retl
  474.     st    %o3,[%o4+%lo(_hiremainder)]
  475.  
  476.         .seg    "data"
  477.         .align  4
  478. _tabshi: .word  4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0
  479.  
  480.     .seg    "bss"
  481.     .align  4
  482. _hiremainder: .skip  4
  483. _overflow: .skip  4
  484.  
  485.